package metadata

import (
	"context"
	"github.com/gin-gonic/gin"
	"github.com/smallnest/rpcx/share"
)

const _CTX_KEY = "golib/net/metadata.ctx"

func CtxFromGinContext(c *gin.Context) (context.Context, bool) {
	if c != nil {
		if v, ok := c.Get(_CTX_KEY); ok {
			res := v.(context.Context)
			return res, true
		}
	}
	return nil, false
}

func GinCtxWithCtx(c *gin.Context, ctx context.Context) {
	if c != nil {
		c.Set(_CTX_KEY, ctx)
	}
}

func NewContextWithMetadata() context.Context {
	md := MD(map[string]interface{}{
		Notice: make(map[string]interface{}),
	})
	ctx := NewContext(context.Background(), md)
	return ctx
}

func CtxFromRpcxContext(c *share.Context) (context.Context, bool) {
	if c != nil {
		if v := c.Value(_CTX_KEY); v != nil {
			res := v.(context.Context)
			return res, true
		}
	}
	return nil, false
}

func RpcxCtxWithCtx(c *share.Context, ctx context.Context) {
	if c != nil {
		c.SetValue(_CTX_KEY, ctx)
	}
}
